package tp.janikowCaminos;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Prestamo {

	List<Cuota> cuotas;
	Cliente cliente;
	double monto;
	EstadoDePrestamo state;
	Calendar fechaSolicitud;
	Configuracion configuracion;
	public double tEM;

	public double getTEM() {
		return this.tEM;
	}

	public int getDNICliente() {
		return (this.cliente.getDNI());
	}

	public Cliente getCliente() {
		return this.cliente;
	}

	public double getMonto() {
		return this.monto;
	}

	public Calendar getFecha() {
		return fechaSolicitud;
	}

	public void setStateEnDeuda() {
		this.state = new EnDeuda();

	}

	public void setStateEnCurso() {
		this.state = new EnCurso();

	}

	public void setStateRechazado() {
		this.state = new Rechazado();

	}

	public void setStateSolicitado() {
		this.state = new Solicitado();

	}

	public void setStateFinalizado() {
		this.state = new Finalizado();

	}

	public void setStateDeudorIncobrable() {
		this.state = new DeudorIncobrable();

	}

	public boolean estaEnCurso() {
		return (this.state instanceof EnCurso);
	}
	
	public boolean estaSolicitado() {
		return (this.state instanceof Solicitado);
	}

	public boolean estaFinalizado() {
		return (this.state instanceof Finalizado);
	}

	public boolean estaEnDeuda() {
		return (this.state instanceof EnDeuda);
	}

	public boolean estaDeudorIncobrable() {
		return (this.state instanceof DeudorIncobrable);
	}

	Prestamo(double monto, List<Cuota> listCuotas, Cliente cliente,
			Configuracion configuracion) {
		this.monto = monto;
		this.cuotas = listCuotas;
		this.state = new Solicitado();
		this.fechaSolicitud = Calendar.getInstance();
		this.cliente = cliente;
		this.configuracion = configuracion;
		this.tEM = 0.002;// PARAMETRIZAR!!!
	}

	public void cambiarEstadoCorrespondiente(boolean b) {
		// TODO Auto-generated method stub
		if (b) {
			this.setStateRechazado();
		} else {
			this.setStateEnCurso();
		}
	}

	public boolean estaRechazado() {
		// TODO Auto-generated method stub
		return (this.state instanceof Rechazado);
	}

	public String getApellido() {
		return this.getCliente().getApellido();
	}

	public int cantCuotas() {
		return (this.cuotas.size());
	}

	public boolean esPosibleDeudor() {
		boolean contador = false;
		for (int i = 0; i < cuotas.size(); i++) {
			if ((!(this.cuotas.get(i).estaPaga))
					&& this.cuotas.get(i).estaVencida()) {
				contador = true;
			}
		}
		return contador;
	}

	public EstadoDePrestamo getEstado() {
		return (this.state);
	}

	public boolean estanTodasLasCuotasPagas() {
		boolean algunaImpaga = false;
		for (int i = 0; i < this.cuotas.size(); i++) {
			if (!(this.cuotas.get(i).estaPaga())) {
				algunaImpaga = true;
			}
		}
		return (!(algunaImpaga));
	}
	public void pagarCuota() {
		// TODO Auto-generated method stub
		boolean pague = false;
		for (int i = 0; i < this.cuotas.size(); i++) {
			if ((!(this.cuotas.get(i).estaPaga) && !(pague)&& this.estaEnCurso()) ) {
				this.cuotas.get(i).pagarCuota();
				pague = true;
			}else {
				System.out.println("NO ESTA APTO PARA PAGAR");
			}
		}
		if (this.estanTodasLasCuotasPagas()){
			this.setStateFinalizado();
		}
	}
		
}
